{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# SVM Regression\n",
    "\n",
    "This function shows how to use TensorFlow to solve support vector regression. We are going\n",
    "to find the line that has the maximum margin which INCLUDES as many points as possible.\n",
    "\n",
    "We will use the iris data, specifically:\n",
    "\n",
    "$y =$ Sepal Length\n",
    "\n",
    "$x =$ Pedal Width\n",
    "\n",
    "To start, load the necessary libraries:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from sklearn import datasets\n",
    "from tensorflow.python.framework import ops\n",
    "ops.reset_default_graph()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create a TF Graph Session:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "sess = tf.Session()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Load the iris data, use the Sepal Length and Petal width for SVM regression."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load the data\n",
    "# iris.data = [(Sepal Length, Sepal Width, Petal Length, Petal Width)]\n",
    "iris = datasets.load_iris()\n",
    "x_vals = np.array([x[3] for x in iris.data])\n",
    "y_vals = np.array([y[0] for y in iris.data])\n",
    "\n",
    "# Split data into train/test sets\n",
    "train_indices = np.random.choice(len(x_vals), round(len(x_vals)*0.8), replace=False)\n",
    "test_indices = np.array(list(set(range(len(x_vals))) - set(train_indices)))\n",
    "x_vals_train = x_vals[train_indices]\n",
    "x_vals_test = x_vals[test_indices]\n",
    "y_vals_train = y_vals[train_indices]\n",
    "y_vals_test = y_vals[test_indices]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Declare the batch size, initialize placeholders, and create linear regression variables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Declare batch size\n",
    "batch_size = 50\n",
    "\n",
    "# Initialize placeholders\n",
    "x_data = tf.placeholder(shape=[None, 1], dtype=tf.float32)\n",
    "y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)\n",
    "\n",
    "# Create variables for linear regression\n",
    "A = tf.Variable(tf.random_normal(shape=[1,1]))\n",
    "b = tf.Variable(tf.random_normal(shape=[1,1]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Declare model operations\n",
    "model_output = tf.add(tf.matmul(x_data, A), b)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our loss function, which maximizes the amount of points near the line."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Declare loss function\n",
    "# = max(0, abs(target - predicted) + epsilon)\n",
    "# 1/2 margin width parameter = epsilon\n",
    "epsilon = tf.constant([0.5])\n",
    "# Margin term in loss\n",
    "loss = tf.reduce_mean(tf.maximum(0., tf.subtract(tf.abs(tf.subtract(model_output, y_target)), epsilon)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " Create the optimization function and initialize all the model variables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Declare optimizer\n",
    "my_opt = tf.train.GradientDescentOptimizer(0.075)\n",
    "train_step = my_opt.minimize(loss)\n",
    "\n",
    "# Initialize variables\n",
    "init = tf.global_variables_initializer()\n",
    "sess.run(init)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Train!  Loop through batches of data and optimize."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-----------\n",
      "Generation: 50\n",
      "A = [[2.2880473]] b = [[2.5914633]]\n",
      "Train Loss = 0.6085886\n",
      "Test Loss = 0.6898191\n",
      "-----------\n",
      "Generation: 100\n",
      "A = [[1.7355974]] b = [[3.525963]]\n",
      "Train Loss = 0.29232156\n",
      "Test Loss = 0.31606266\n",
      "-----------\n",
      "Generation: 150\n",
      "A = [[1.3424476]] b = [[4.1874633]]\n",
      "Train Loss = 0.12613198\n",
      "Test Loss = 0.12989451\n",
      "-----------\n",
      "Generation: 200\n",
      "A = [[1.1654475]] b = [[4.470964]]\n",
      "Train Loss = 0.094424084\n",
      "Test Loss = 0.08894979\n"
     ]
    }
   ],
   "source": [
    "# Training loop\n",
    "train_loss = []\n",
    "test_loss = []\n",
    "for i in range(200):\n",
    "    rand_index = np.random.choice(len(x_vals_train), size=batch_size)\n",
    "    rand_x = np.transpose([x_vals_train[rand_index]])\n",
    "    rand_y = np.transpose([y_vals_train[rand_index]])\n",
    "    sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "    \n",
    "    temp_train_loss = sess.run(loss, feed_dict={x_data: np.transpose([x_vals_train]), y_target: np.transpose([y_vals_train])})\n",
    "    train_loss.append(temp_train_loss)\n",
    "    \n",
    "    temp_test_loss = sess.run(loss, feed_dict={x_data: np.transpose([x_vals_test]), y_target: np.transpose([y_vals_test])})\n",
    "    test_loss.append(temp_test_loss)\n",
    "    if (i+1)%50==0:\n",
    "        print('-----------')\n",
    "        print('Generation: ' + str(i+1))\n",
    "        print('A = ' + str(sess.run(A)) + ' b = ' + str(sess.run(b)))\n",
    "        print('Train Loss = ' + str(temp_train_loss))\n",
    "        print('Test Loss = ' + str(temp_test_loss))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For plotting, we need to extract the coefficients and get the best fit line. (Also the upper and lower margins.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Extract Coefficients\n",
    "[[slope]] = sess.run(A)\n",
    "[[y_intercept]] = sess.run(b)\n",
    "[width] = sess.run(epsilon)\n",
    "\n",
    "# Get best fit line\n",
    "best_fit = []\n",
    "best_fit_upper = []\n",
    "best_fit_lower = []\n",
    "for i in x_vals:\n",
    "  best_fit.append(slope*i+y_intercept)\n",
    "  best_fit_upper.append(slope*i+y_intercept+width)\n",
    "  best_fit_lower.append(slope*i+y_intercept-width)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Matplotlib code to plot the fit and loss."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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4NJLL80PFpMnTy70mi9JSUn07NmTrVvdMxRycnIYPXo0p556Kp07d2bixIkA5Obmcsstt9C2bVvOPfdczj///PzKtEWLFtx///1069aNqVOnsm7dOgYOHEj37t3p27cvP/74IwBTp06lY8eOdOnShTPPPBOAlStX0rNnT9LS0ujcuTNr164Fjqe7VlVGjx6dn8Y67/x8pcEOxsaNG/OvlCZNmsTFF1/MwIEDad26Nffdd1/+el988QW9e/emW7duDB06lIMHDwa1/5Coatx/de/eXY1JJKtWrTr+C0Tuy4cDBw5oly5dtHXr1nrzzTfrrFmz8l8bP3683nXXXaqqOm/ePC34/9m8eXP98ccftXfv3qqqmpaWpitXrtQOHToUO8aGDRvyl2dmZmq/fv106dKlqqo6ceJEfeyxx1RV9ciRI9q9e3ddv369Tp06Vc877zzNycnR7du3a61atXTq1Kn5x37qqafy93/22WfrTz/9pKqq8+fP1/79+6uqaseOHXXLli2qqvrbb7+pquptt92m//rXv1RV9ejRo3r48GFVVa1WrZqqqr7//vv6hz/8QbOzs3XHjh3atGlT3bZtm86cOVNr1Kihmzdv1pycHD3ttNN09uzZxc716quvzi+nt/N/4403tGXLlrpv3z7NzMzUZs2a6aZNm3T37t3at29fPXjwoKqqjhs3Th955BGvn1mhvxkPYKEGUcdariFjTDEpKSlkZGQwe/ZsZs6cybBhwxg3bhwjR45k2LBhnH766Tz77LPFuoUA6tSpQ+3atXn33Xdp164dJ5xwgs/jrFu3jrS0NDZs2MAFF1xA586dAdcKXrZsWX5rf//+/axdu5bvv/+eoUOHUqFCBRo2bEj//v0L7W/YsGEAHDx4kLlz5zJ06ND8144ePQpAnz59GDlyJJdeeikXX3wxAL179+aJJ55gy5YtXHzxxbRu3brQfr///nuGDx9OUlISDRo04KyzzuKHH36gRo0a+Wmwgfw02GeccUbI7/k555xDzZo1AWjfvj2//PIL+/btY9WqVfTp0weAY8eO0bt375D3HYgFAmPiXYzygSUlJdGvXz/69etHp06dePPNNxk5ciRNmzalZcuWfPvtt3zwwQfMmzev2LbDhg3j1ltvZdKkSX6PkTdGsGfPHvr06cPHH3/MhRdeiKry97//nQEDBhRa/7PPPvO7v7ykdrm5udSqVctrausJEyawYMECPv30U7p3705GRgaXX345vXr14tNPP+X8889n4sSJnH322QHeISeYNNjh7kdVOffcc5k8eXJY+wyWjREYY4pZs2ZNfj85uJlBzZs3z/99+PDh3H333Zx00kn5reGCLrroIu67775iFbkvdevWZdy4cflZQQcMGMCrr76aP4vop59+4tChQ/Tp04cPPviA3Nxcdu7cyaxZs7zur0aNGrRs2ZKpU6cCrgt86dKlgLsK6dWrF48++ij16tVj8+bNrF+/npNOOok77riDQYMGsWzZskL769u3L++99x45OTns3r2b7777Lj8raiSddtppzJkzJ//RnYcOHeKnn34q9eNYIDDGFHPw4EGuvvpq2rdvT+fOnVm1ahUPP/xw/utDhw5l5cqVPgeCq1evzv3330/lypWDPubgwYM5fPgws2fP5vrrr6d9+/Z069aNjh07cuONN5Kdnc0ll1xCamoq7du354orrqBbt2753SlFvf3227z++ut06dKFDh068O9//xuA0aNH06lTJzp27Mjpp59Oly5dmDJlCh07diQtLY0VK1Zw1VVXFdrXRRddROfOnenSpQtnn302Tz/9NA0bNgz63ABuvPFGUlNTSU1NDbp7p169ekyaNInhw4fTuXNnevfunT/oXZosDbUxccjSUPt28OBBUlJS2Lt3Lz179mTOnDkhV8rlUUnSUNsYgTGmTPnjH//Ivn37OHbsGH/9618tCJQCCwTGmDLF17iACZ+NERgTp8pCt62JDyX9W7FAYEwcqlq1Knv37rVgYAJSVfbu3UvVqlXD3od1DRkTh1JTU9myZQu7d++OdVFMGVC1alWv03iDZYHAmDhUqVIlWrZsGetimAQRk64hERkoImtE5GcRGROLMhhjjHGiHghEJAl4GTgPaA8MF5H20S6HMcYYJxZXBD2Bn1V1vaoeA94FBsWgHMYYY4jNGEETYHOB37cAvYquJCKjgFGeXw+KyBqgLrAn4iWMX4l8/ol87pDY52/nHr7mgVeJ48FiVU0H0gsuE5GFwdwuXV4l8vkn8rlDYp+/nXvkzz0WXUNbgaYFfk/1LDPGGBMDsQgEPwCtRaSliFQGLgM+jkE5jDHGEIOuIVXNFpHbgBlAEvAPVV0Z5ObpgVcp1xL5/BP53CGxz9/OPcLKRBpqY4wxkWO5howxJsFZIDDGmAQXl4EgUAoKEakiIu95Xl8gIi2iX8rICOLcR4rIbhFZ4vm6PhbljAQR+YeI7BKRFT5eFxF50fPeLBORbtEuYyQFcf79RGR/gc/+oWiXMVJEpKmIzBSRVSKyUkTu9LJOufz8gzz3yH72qhpXX7gB5HXASUBlYCnQvsg6twATPD9fBrwX63JH8dxHAi/FuqwROv8zgW7ACh+vnw9MBwQ4DVgQ6zJH+fz7AZ/EupwROvdGQDfPz9WBn7z87ZfLzz/Ic4/oZx+PVwTBpKAYBLzp+fl94BwRkSiWMVISOv2Gqn4H/OpnlUHAP9WZD9QSkUbRKV3kBXH+5ZaqblfVRZ6fDwCrcVkICiqXn3+Q5x5R8RgIvKWgKPqm5K+jqtnAfqBOVEoXWcGcO8Alnkvj90WkqZfXy6tg35/yrLeILBWR6SLSIdaFiQRPV29XYEGRl8r95+/n3CGCn308BgLj33+AFqraGfiS41dGpvxbBDRX1S7A34FpMS5PqRORFOAD4C5V/T3W5YmmAOce0c8+HgNBMCko8tcRkYpATWBvVEoXWQHPXVX3qupRz6//B3SPUtniQUKnJ1HV31X1oOfnz4BKIlI3xsUqNSJSCVcRvq2qH3pZpdx+/oHOPdKffTwGgmBSUHwMXO35eQjwjXpGVMq4gOdepE/0Qlx/YqL4GLjKM3vkNGC/qm6PdaGiRUQa5o2FiUhP3P9veWgA4Tmv14HVqvqcj9XK5ecfzLlH+rOPu+yj6iMFhYg8CixU1Y9xb9pbIvIzbnDtstiVuPQEee53iMiFQDbu3EfGrMClTEQm42ZH1BWRLcDfgEoAqjoB+Aw3c+Rn4DBwTWxKGhlBnP8Q4GYRyQYygcvKSQMIoA9wJbBcRJZ4lj0ANINy//kHc+4R/ewtxYQxxiS4eOwaMsYYE0UWCIwxJsFZIDDGmARngcAYYxKcBQJjjElwFghMuSIiOZ7sjCtEZKqInBBg/QeC3O/GojfwiMidIvJCgd8nishXBX6/XURe9Pw818d+J4nIEM/PdxUsr4gcDKZsxpSUBQJT3mSqapqqdgSOATcFWD+oQODDHOD0Ar93AWqKSJLn99OBuQCqejqB3QX4DVzGRIIFAlOezQZOBhCRK0Tkv56rhYkikiQi44Bkz7K3PetNE5EMT174UQH2vwQ4RUSSRaQm7kafJUAnz+un44JFfuvec1fsS+KeOfEVUN+z/A6gMTBTRGbmHUBEnvAkGpsvIg1K520xpjALBKZc8uSgOg93t2Y7YBjQR1XTgBxghKqO4fgVxAjPpteqanegB+4ubp9ZbT2ZbxcDp+LJjw/MB04XkSa4GzY3F9nsIqAN0B64Cs8Vhaq+CGwD+qtqf8+61YD5nkRj3wE3hP+OGONb3KWYMKaEkgvcpj8bl45kFC453w+edC3JwC4f298hIhd5fm4KtMZ/Tpe5uMo8GZgHrMV1N+32vFbUmcBkVc0BtonIN372fQz4xPNzBnCun3WNCZsFAlPeZHpa/fk8ybreVNWx/jYUkX7AH4DeqnpYRGYBVQMcbw5uHKIq8DIuALTHdyAIRVaBfDI52P+riRDrGjKJ4GtgiIjk9cefKCLNPa9leVIAg0tn/psnCLTFdfcEMs+zXj1V3eWpuHfjnqY1x8v63wHDPGUYHSsAAACRSURBVGMUjYD+BV47gHtUoTFRZYHAlHuqugp4EPhCRJbhHuiTl847HVjmGSz+HKgoIquBcbj+/kD7/g1X8a8ssHgebhB4qZdNPsJ1H60C/ulZN0868HnBwWJjosGyjxpjTIKzKwJjjElwFgiMMSbBWSAwxpgEZ4HAGGMSnAUCY4xJcBYIjDEmwVkgMMaYBPf/ATDNqtNHkh9UAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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ZAgpKSn86le/AuqeItnXgqeE785lfX7Xrjz59dfs3buXzp07BzgoY9qoc845ftkVV8Dtt0NZGUyZcvzrN9zgPIqL4bLLjn7ts8+aFcbatWuZN28eixYtIjw8nFtvvZU333yTgQMHUlxczJo1awAoKSkhLi6O2bNn88c//rFmBt3aZsyYwaBBg5g4cSIXXngh1113He3bt+ehhx5i8uTJvPTSS+zdu5cxY8aQmZnJb3/7W9auXdvoyeTKysqYPn06n3/+OQMHDqyZEvnyyy/n448/JisrCxGpmQ65rimSfS14SvinngpduzLcnRVv6dKlAQ7IGHOyPv30U5YvX056ejqpqal8/vnnbNq0icTERDZs2MCdd97J/Pnz6dSp0wn39eCDD7J8+XImTZrEK6+8wkUXXQQ4pfJHHnmE1NRUJk6cyKFDh9iyZUuTY83Ozua0005j4MCBgDMd8hdffEGXLl3weDzccsstzJs3r2b2z7qmSPa14Cnhi0BaGt23bcPj8bB48eKgqnszxq8aKpF36NDw6/HxzS7RH0tVmT59ep0NrJmZmXzyySc888wzvPfeezz//PMn3F9iYiKJiYncfPPNxMfHs2/fPlSVv//97zWJutoXX7TM3VgjIiJYsWIFCxcu5J133uHZZ59lwYIFdU6R7OtaieAp4QOMHEnYunWkDR3K4sWLAx2NMeYkTZo0ibfffpvi4mLA6c2zZcsWioqKUFUuv/xyHnroIVatWgXQ4BTGH330Uc1dpDZu3Ej79u2JjY3lggsuYPbs2TXrrV69+oT7qktSUhIbN26suTXh3LlzOfvssyktLWX//v1MnTqVJ554omb/dU2R7GvBU8IHp44xKYlxX37Jy2+/TVVVVb03PDbGtH7JycnMnDmTSZMmUVVVRUREBM899xxhYWHcdNNNNdOhP/roowDceOON3HzzzURFRbFs2bKjboTy0ksvcffddxMVFUVERASvv/46Ho+HmTNnMmPGDJKTk6mqqiIxMZH333+fc889l8cee4wRI0Zw//33c9kx7RLz588/ajrkefPm8cILL3DppZdSWVnJmDFjuOWWWygsLOTSSy/l8OHDVFVV8fjjjwN1T5Hsa0EzPXJtr7zyCtdffz1r165l6NChLRCZMcHNpkduG2x65GNlZ3OWewOUlrh4GGNMsAi+hP9f/0XfRx8lJibGEr4x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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot fit with data\n",
    "plt.plot(x_vals, y_vals, 'o', label='Data Points')\n",
    "plt.plot(x_vals, best_fit, 'r-', label='SVM Regression Line', linewidth=3)\n",
    "plt.plot(x_vals, best_fit_upper, 'r--', linewidth=2)\n",
    "plt.plot(x_vals, best_fit_lower, 'r--', linewidth=2)\n",
    "plt.ylim([0, 10])\n",
    "plt.legend(loc='lower right')\n",
    "plt.title('Sepal Length vs Petal Width')\n",
    "plt.xlabel('Petal Width')\n",
    "plt.ylabel('Sepal Length')\n",
    "plt.show()\n",
    "\n",
    "# Plot loss over time\n",
    "plt.plot(train_loss, 'k-', label='Train Set Loss')\n",
    "plt.plot(test_loss, 'r--', label='Test Set Loss')\n",
    "plt.title('L2 Loss per Generation')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('L2 Loss')\n",
    "plt.legend(loc='upper right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
